#include <bits/stdc++.h>
using namespace std;
#define mm(a) memset(a,0,sizeof(a));

struct node{
    node() {}
    node(string ss, int tt) {
        s = ss;
        step = tt;
    }
    string s;
    int step;
};

map<string, bool> mp; // 表示 某一个字符串是否被遍历
queue<node> q;        // 队列用与bfs
void bfs() {
    while (!q.empty()) {
        node cur = q.front(); 
        q.pop();
        string s = cur.s;
        int step = cur.step;
        if (s == "087654321") {
            cout << step << endl;
            break;
        }
        // 找到空位
        int pos = 0;
        while (s[pos] != '0') pos++;
        // 交换位置 重新入队
        for (int sp = pos - 2; sp <= pos + 2; sp++) {
            int k = (sp + 9) % 9;                      // 为了形成环形 需要 加9之后模9
            if (k == pos) continue;
            char temp;
            temp = s[pos]; s[pos] = s[k]; s[k] = temp; // 交换得到新的字符串
            if (!mp[s]) {
                mp[s] = true;
                q.push(node(s, step + 1));
            }
            temp = s[pos]; s[pos] = s[k]; s[k] = temp; // 重新交换回来，进行判断下一个
        }

    }
}

int main() {
    string s = "012345678";
    q.push(node(s, 0));
    mp[s] = true;
    bfs();
    return 0;
}